WPF (Windows Presentation Foundation) এ Printing এবং Print Preview খুবই গুরুত্বপূর্ণ ফিচার। এটি ডেভেলপারদের অ্যাপ্লিকেশন থেকে সরাসরি কাস্টম কন্টেন্ট প্রিন্ট করার সুযোগ প্রদান করে। প্রিন্টিং প্রক্রিয়া সাধারণত দুটি ধাপে ভাগ করা যায়:
- Printing: ডেটা বা কন্টেন্ট কাগজে প্রিন্ট করা।
- Print Preview: কাগজে প্রিন্ট হওয়ার আগে ইউজারকে একটি প্রিভিউ দেখানো যাতে তারা প্রিন্ট কন্টেন্ট যাচাই করতে পারে।
WPF প্রিন্টিং ফিচারের জন্য প্রধানত দুটি API ব্যবহার করা হয়:
- PrintDialog: প্রিন্ট ডায়লগ শো করার জন্য।
- PrintDocument: প্রিন্ট করা কন্টেন্ট নির্ধারণ করার জন্য।
এখানে WPF এর প্রিন্টিং এবং প্রিন্ট প্রিভিউ কিভাবে ইমপ্লিমেন্ট করতে হয় তা বিস্তারিত আলোচনা করা হলো।
WPF Printing Implementation
WPF অ্যাপ্লিকেশন থেকে প্রিন্ট করার জন্য PrintDialog, PrintVisual এবং VisualBrush ব্যবহার করা হয়। PrintDialog কাস্টম প্রিন্টার নির্বাচন এবং সেটিংস কনফিগার করার সুযোগ দেয়, এবং PrintVisual ইউজারের জন্য ভিজ্যুয়াল কন্টেন্ট প্রিন্ট করতে সহায়তা করে।
Printing Example
নিচে একটি সাধারণ উদাহরণ দেওয়া হয়েছে যেখানে একটি TextBlock প্রিন্ট করা হচ্ছে।
MainWindow.xaml:
<Window x:Class="WPFPrintingExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WPF Printing Example" Height="350" Width="525">
<Grid>
<Button Content="Print" HorizontalAlignment="Center" VerticalAlignment="Center" Click="PrintButton_Click"/>
<TextBlock Name="textBlock" Text="This is a print test." HorizontalAlignment="Center" VerticalAlignment="Top" Margin="10"/>
</Grid>
</Window>
MainWindow.xaml.cs:
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Printing;
namespace WPFPrintingExample
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void PrintButton_Click(object sender, RoutedEventArgs e)
{
// Create a PrintDialog object
PrintDialog printDialog = new PrintDialog();
// Show print dialog
if (printDialog.ShowDialog() == true)
{
// Use the PrintVisual method to print the content
printDialog.PrintVisual(textBlock, "Printing TextBlock");
}
}
}
}
এখানে, PrintDialog ব্যবহার করে প্রিন্টারের ডায়লগ উইন্ডো প্রদর্শন করা হয়েছে, এবং তারপর PrintVisual এর মাধ্যমে TextBlock কন্টেন্ট প্রিন্ট করা হয়েছে। PrintVisual ইউজারের জন্য কন্টেন্টকে প্রিন্ট করার জন্য ব্যবহৃত হয়।
Print Preview Implementation
WPF এ Print Preview ইমপ্লিমেন্ট করার জন্য সাধারণত PrintPreviewDialog ব্যবহার করা হয়, তবে WPF নিজে কোনো সরাসরি PrintPreviewDialog প্রদান করে না। এর পরিবর্তে, আপনাকে PrintDialog এবং VisualBrush ব্যবহার করে একটি প্রিভিউ তৈরি করতে হবে।
Print Preview Example
এখানে একটি উদাহরণ দেওয়া হলো যেখানে Print Preview ইমপ্লিমেন্ট করা হয়েছে।
MainWindow.xaml:
<Window x:Class="WPFPrintingExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WPF Printing Example" Height="350" Width="525">
<Grid>
<Button Content="Print Preview" HorizontalAlignment="Center" VerticalAlignment="Center" Click="PrintPreviewButton_Click"/>
<TextBlock Name="textBlock" Text="This is a print preview test." HorizontalAlignment="Center" VerticalAlignment="Top" Margin="10"/>
</Grid>
</Window>
MainWindow.xaml.cs:
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Printing;
namespace WPFPrintingExample
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void PrintPreviewButton_Click(object sender, RoutedEventArgs e)
{
// Create a PrintDialog object for print preview
PrintDialog printDialog = new PrintDialog();
// Use PrintVisual for preview
printDialog.PrintVisual(textBlock, "Print Preview of TextBlock");
}
}
}
এখানে, PrintDialog কাস্টম প্রিন্ট ডায়লগ উইন্ডো প্রদর্শন করবে এবং সেই সাথে PrintVisual কন্টেন্ট প্রিন্ট করার আগে একটি প্রিভিউ দেখাবে। ইউজার প্রিভিউ দেখার পরে প্রিন্ট করতে পারবে।
WPF Printing কাস্টমাইজেশন
WPF প্রিন্টিং ফিচার আরও কাস্টমাইজ করতে, আপনি PrintTicket এবং PrintCapabilities এর মাধ্যমে প্রিন্টার সেটিংস ম্যানেজ করতে পারেন, যেমন পৃষ্ঠার আকার, মার্জিন, প্রিন্ট রেজল্যুশন ইত্যাদি।
Custom Print Settings Example
using System.Windows;
using System.Windows.Controls;
using System.Windows.Printing;
namespace WPFPrintingExample
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void PrintButton_Click(object sender, RoutedEventArgs e)
{
// Create a PrintDialog object
PrintDialog printDialog = new PrintDialog();
// Set print options (e.g., page size, orientation)
printDialog.PrintTicket.PageMediaSize = PageMediaSize.NorthAmericaLetter;
printDialog.PrintTicket.PageOrientation = PageOrientation.Portrait;
// Show print dialog
if (printDialog.ShowDialog() == true)
{
// Print the content
printDialog.PrintVisual(textBlock, "Printing TextBlock with Custom Settings");
}
}
}
}
এখানে PrintTicket এবং PrintCapabilities এর মাধ্যমে কাস্টম প্রিন্ট সেটিংস তৈরি করা হয়েছে। এটি পৃষ্ঠার আকার এবং গুণগত মান নির্ধারণ করতে ব্যবহৃত হয়।
Conclusion
WPF তে Printing এবং Print Preview ইমপ্লিমেন্টেশন অ্যাপ্লিকেশন থেকে কাস্টম কন্টেন্ট প্রিন্ট করতে সাহায্য করে এবং ইউজারকে প্রিন্ট করার আগে একটি প্রিভিউ দেখানোর সুযোগ দেয়। PrintDialog ব্যবহার করে প্রিন্ট ডায়লগ উইন্ডো দেখানো যায় এবং PrintVisual ব্যবহার করে UI কন্ট্রোল প্রিন্ট করা হয়। Print Preview কাস্টম UI উপাদানগুলোকে প্রিন্ট করার আগে দেখানোর মাধ্যমে ইউজারের অভিজ্ঞতা উন্নত করা যায়।
WPF (Windows Presentation Foundation) এ PrintDialog এবং PrintDocument ব্যবহার করে সহজেই ডকুমেন্ট প্রিন্ট করা যায়। এই দুটি কন্ট্রোল আপনাকে উইন্ডোজ প্রিন্টিং ফাংশনালিটি এক্সপোজ করতে সহায়তা করে, যা ব্যবহারকারীকে প্রিন্ট অপশন সিলেক্ট করতে এবং ডকুমেন্ট প্রিন্ট করার কাজটি সম্পাদন করতে দেয়।
PrintDialog
PrintDialog হল একটি ডায়ালগ বক্স যা ব্যবহারকারীকে প্রিন্টার নির্বাচন, কপির সংখ্যা, এবং অন্যান্য প্রিন্ট সেটিংস কনফিগার করার জন্য উপযুক্ত। আপনি PrintDialog ব্যবহার করে একটি প্রিন্টিং অপারেশন শুরু করতে পারেন।
PrintDialog এর বৈশিষ্ট্য:
- Printer Selection: এটি ব্যবহারকারীকে প্রিন্টারের তালিকা প্রদর্শন করতে সাহায্য করে।
- Custom Print Settings: ব্যবহারকারীকে কাস্টম সেটিংস যেমন পৃষ্ঠা সংখ্যা, কপির সংখ্যা, পেপার সাইজ নির্বাচন করার সুযোগ দেয়।
PrintDocument
PrintDocument হল একটি ক্লাস যা প্রিন্টিং এর জন্য ডকুমেন্ট প্রক্রিয়া করে। এটি ডকুমেন্টের বিভিন্ন অংশ (যেমন পেজ) প্রিন্ট করার জন্য ব্যবহৃত হয়। PrintDocument তে প্রিন্টিং ইভেন্টগুলি যেমন PrintPage ইভেন্ট ব্যবহৃত হয়, যা একে একে পৃষ্ঠার কনটেন্ট প্রিন্ট করতে সাহায্য করে।
Step-by-Step: PrintDialog এবং PrintDocument ব্যবহার করা
1. PrintDialog ব্যবহার করা
প্রথমে, PrintDialog কন্ট্রোল ব্যবহার করে ব্যবহারকারীকে প্রিন্ট অপশন দেখানো হয়।
<Window x:Class="WPFApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Print Example" Height="350" Width="525">
<Grid>
<Button Content="Print" HorizontalAlignment="Center" VerticalAlignment="Center" Click="PrintButton_Click"/>
</Grid>
</Window>
C# Code:
private void PrintButton_Click(object sender, RoutedEventArgs e)
{
PrintDialog printDialog = new PrintDialog();
// Check if the user has selected a printer and clicked 'Print'
if (printDialog.ShowDialog() == true)
{
// Use PrintDocument to print content
printDialog.PrintDocument(((IDocumentPaginatorSource)myDocument).DocumentPaginator, "Printing Document");
}
}
ব্যাখ্যা:
- এখানে PrintDialog কন্ট্রোল ব্যবহার করা হয়েছে, যা প্রিন্টার নির্বাচন এবং প্রিন্ট সেটিংস কনফিগার করতে সাহায্য করে।
ShowDialog()মেথড ব্যবহার করে ডায়ালগটি প্রদর্শন করা হয়।- যদি ব্যবহারকারী 'Print' ক্লিক করেন, তাহলে PrintDocument ব্যবহার করে ডকুমেন্টটি প্রিন্ট করা হয়।
2. PrintDocument ব্যবহার করা
PrintDocument কন্ট্রোলটি একাধিক পৃষ্ঠার কন্টেন্ট প্রিন্ট করার জন্য ব্যবহৃত হয়। এটি পৃষ্ঠার প্রতিটি অংশ PrintPage ইভেন্টে ড্র করে।
private void PrintButton_Click(object sender, RoutedEventArgs e)
{
PrintDialog printDialog = new PrintDialog();
// Check if the user has selected a printer and clicked 'Print'
if (printDialog.ShowDialog() == true)
{
// Create PrintDocument
PrintDocument printDocument = new PrintDocument();
// Handle the PrintPage event
printDocument.PrintPage += PrintDocument_PrintPage;
// Use PrintDialog to print the document
printDialog.PrintDocument(printDocument.DocumentPaginator, "Document Print");
}
}
private void PrintDocument_PrintPage(object sender, PrintPageEventArgs e)
{
// Define the content to print on the page
string content = "Hello, this is a printed page!";
// Draw the content on the printed page
e.Graphics.DrawString(content, new Font("Arial", 12), Brushes.Black, 100, 100);
// Indicate that the printing is complete
e.HasMorePages = false; // Set to true for multiple pages
}
ব্যাখ্যা:
PrintDialogকন্ট্রোলের মাধ্যমে ব্যবহারকারীকে প্রিন্টার এবং কাস্টম সেটিংস নির্বাচন করার সুযোগ দেওয়া হয়।- PrintDocument অবজেক্ট তৈরি করা হয় এবং PrintPage ইভেন্টে ডকুমেন্টের কন্টেন্ট নির্দিষ্ট করা হয়।
e.Graphics.DrawStringমেথড ব্যবহার করে পৃষ্ঠায় টেক্সট বা কন্টেন্ট প্রিন্ট করা হয়।e.HasMorePagesপ্রপার্টি ব্যবহার করে একাধিক পৃষ্ঠা প্রিন্ট করার কনফিগারেশন করা হয়।
Additional Features in PrintDialog and PrintDocument
- Setting Print Preferences: আপনি PrintDialog কন্ট্রোলের PrintTicket প্রপার্টি ব্যবহার করে কাস্টম প্রিন্ট সেটিংস নির্ধারণ করতে পারেন, যেমন পৃষ্ঠা সাইজ, পেপার টাইপ, ইত্যাদি।
- Handling Multiple Pages: PrintDocument তে HasMorePages প্রপার্টি ব্যবহার করে আপনি একাধিক পৃষ্ঠা প্রিন্ট করার জন্য পৃষ্ঠার সংখ্যা নির্ধারণ করতে পারেন। যদি HasMorePages কে
trueসেট করা হয়, তাহলে PrintPage ইভেন্টটি আবার ট্রিগার হবে। - Printing Images: আপনি PrintDocument এর মাধ্যমে ইমেজও প্রিন্ট করতে পারেন। উদাহরণস্বরূপ,
e.Graphics.DrawImage()মেথড ব্যবহার করে ইমেজ প্রিন্ট করা যায়।
private void PrintDocument_PrintPage(object sender, PrintPageEventArgs e)
{
Image img = Image.FromFile("path/to/image.jpg");
e.Graphics.DrawImage(img, new Point(100, 100));
e.HasMorePages = false;
}
- Print Preview: WPF তে PrintPreview সরাসরি সাপোর্ট করে না, তবে আপনি DocumentPaginator এবং Visuals ব্যবহার করে কাস্টম প্রিভিউ তৈরি করতে পারেন। আপনি PrintPreviewDialog ব্যবহার করে ডকুমেন্টের প্রিভিউ দেখাতে পারেন।
Conclusion
PrintDialog এবং PrintDocument WPF এ প্রিন্টিংয়ের জন্য খুবই শক্তিশালী এবং নমনীয় টুলস। PrintDialog ব্যবহার করে ব্যবহারকারীদের প্রিন্ট সেটিংস নির্বাচন করতে এবং PrintDocument এর মাধ্যমে পৃষ্ঠার কন্টেন্ট প্রিন্ট করতে সক্ষম। আপনি ডকুমেন্টের পৃষ্ঠার কন্টেন্ট কাস্টমাইজ করতে PrintPage ইভেন্ট ব্যবহার করতে পারেন, যা বিভিন্ন ধরনের ডকুমেন্ট প্রিন্টিংয়ের কাজকে সহজ করে তোলে।
WPF (Windows Presentation Foundation) এ Print Preview তৈরি এবং কাস্টমাইজ করা একটি গুরুত্বপূর্ণ টপিক, বিশেষ করে যখন আপনি ব্যবহারকারীদের জন্য প্রিন্ট ফিচার তৈরি করতে চান। WPF এ প্রিন্টিং কাজ করার জন্য PrintDialog, PrintPreviewDialog এবং PrintVisual ইত্যাদি কন্ট্রোল ব্যবহার করা হয়। তবে, WPF তে একটি Print Preview কন্ট্রোল সরাসরি দেওয়া হয়নি, কিন্তু আপনি এটি কাস্টমাইজড প্রিন্টিং সিস্টেম ব্যবহার করে তৈরি করতে পারেন।
Print Preview কি?
Print Preview হল একটি ফিচার যা ব্যবহারকারীদের প্রিন্ট করার আগে তাদের ডকুমেন্টের একটি প্রিভিউ দেখানোর সুবিধা দেয়। এটি ব্যবহারকারীদের পৃষ্ঠার বিন্যাস, কনটেন্ট এবং মার্জিন দেখতে এবং প্রয়োজন অনুযায়ী সংশোধন করার সুযোগ দেয়।
WPF তে Print Preview তৈরি করতে PrintDialog, PrintVisual এবং FixedDocument ব্যবহার করা হয়।
Print Preview তৈরি করা
WPF তে Print Preview তৈরি করার জন্য আমরা সাধারণত PrintDialog ব্যবহার করি। এতে ডকুমেন্ট বা UI উপাদানটি প্রিন্ট করার আগে একটি প্রিভিউ দেখানো যায়।
Step 1: PrintDialog ব্যবহার করা
প্রথমে, WPF অ্যাপ্লিকেশনে প্রিন্ট ডায়ালগ খুলতে PrintDialog ব্যবহার করা হয়। এটি ব্যবহারকারীদের প্রিন্ট অপশন এবং প্রিন্ট প্যারামিটার নির্বাচন করতে সহায়তা করে।
private void ShowPrintPreview()
{
// Create a PrintDialog
PrintDialog printDialog = new PrintDialog();
// Open the PrintDialog window
if (printDialog.ShowDialog() == true)
{
// Create a Visual to be printed
FixedDocument fixedDocument = new FixedDocument();
// Create a FixedPage for the content
FixedPage fixedPage = new FixedPage();
// Add the content (for example, a simple text block)
TextBlock textBlock = new TextBlock
{
Text = "Hello, this is a print preview example!",
FontSize = 30
};
fixedPage.Children.Add(textBlock);
// Set the page size
fixedPage.Width = printDialog.PrintableAreaWidth;
fixedPage.Height = printDialog.PrintableAreaHeight;
// Create a page and add to the FixedDocument
PageContent pageContent = new PageContent();
((IAddChild)pageContent).AddChild(fixedPage);
fixedDocument.Pages.Add(pageContent);
// Show the print preview dialog
printDialog.PrintDocument(fixedDocument.DocumentPaginator, "Print Preview");
}
}
ব্যাখ্যা:
- PrintDialog কন্ট্রোল ব্যবহার করে প্রিন্ট ডায়ালগ খুলে।
- FixedDocument এবং FixedPage তৈরি করা হয়েছে যেখানে আপনার কনটেন্ট (যেমন, টেক্সট, ছবি) থাকবে।
- PrintDialog.PrintDocument মেথডের মাধ্যমে ডকুমেন্টের প্রিন্ট প্রিভিউ দেখানো হয়।
Print Preview কাস্টমাইজ করা
Print Preview কাস্টমাইজ করার জন্য আপনি FixedDocument এবং FixedPage ব্যবহার করতে পারেন, যা WPF তে প্রিন্টিংয়ের জন্য গঠনমূলক ডকুমেন্ট তৈরির কাজে ব্যবহৃত হয়।
Example: Customizing Print Preview (With Multiple Pages)
private void ShowCustomPrintPreview()
{
// Create a PrintDialog
PrintDialog printDialog = new PrintDialog();
// Open PrintDialog for user to select printer
if (printDialog.ShowDialog() == true)
{
// Create FixedDocument
FixedDocument fixedDocument = new FixedDocument();
// Create multiple pages for the print preview
for (int pageNumber = 0; pageNumber < 3; pageNumber++)
{
FixedPage fixedPage = new FixedPage();
// Add dynamic content to each page
TextBlock textBlock = new TextBlock
{
Text = $"This is page {pageNumber + 1}",
FontSize = 20
};
fixedPage.Children.Add(textBlock);
// Set page size
fixedPage.Width = printDialog.PrintableAreaWidth;
fixedPage.Height = printDialog.PrintableAreaHeight;
// Add fixedPage to FixedDocument
PageContent pageContent = new PageContent();
((IAddChild)pageContent).AddChild(fixedPage);
fixedDocument.Pages.Add(pageContent);
}
// Show print preview
printDialog.PrintDocument(fixedDocument.DocumentPaginator, "Custom Print Preview");
}
}
ব্যাখ্যা:
- এখানে ৩টি পৃষ্ঠা তৈরি করা হয়েছে, এবং প্রতিটি পৃষ্ঠায় একটি TextBlock যোগ করা হয়েছে।
- TextBlock এর মধ্যে ডাইনামিক কনটেন্ট (যেমন পৃষ্ঠা নম্বর) যোগ করা হয়েছে।
- এই কাস্টম প্রিন্ট প্রিভিউতে Multiple Pages প্রদর্শন করা হচ্ছে।
Print Preview কাস্টম স্টাইলিং এবং লেআউট
WPF তে Print Preview এর লেআউট কাস্টমাইজ করতে FixedPage এর মধ্যে বিভিন্ন ধরনের কন্ট্রোল যেমন TextBlock, Image, Canvas, Grid ইত্যাদি যোগ করা যায়। আপনি সেগুলির জন্য স্টাইলও নির্ধারণ করতে পারেন।
Example: Adding Multiple Controls and Styling
private void ShowStyledPrintPreview()
{
PrintDialog printDialog = new PrintDialog();
if (printDialog.ShowDialog() == true)
{
FixedDocument fixedDocument = new FixedDocument();
FixedPage fixedPage = new FixedPage();
fixedPage.Width = printDialog.PrintableAreaWidth;
fixedPage.Height = printDialog.PrintableAreaHeight;
// Add some styled content
TextBlock headerText = new TextBlock
{
Text = "Report Header",
FontSize = 24,
FontWeight = FontWeights.Bold,
HorizontalAlignment = HorizontalAlignment.Center,
Margin = new Thickness(0, 10, 0, 0)
};
fixedPage.Children.Add(headerText);
// Add an image to the page
Image image = new Image
{
Source = new BitmapImage(new Uri("Images/sample_image.jpg", UriKind.Relative)),
Width = 200,
Height = 150,
HorizontalAlignment = HorizontalAlignment.Center,
Margin = new Thickness(0, 50, 0, 0)
};
fixedPage.Children.Add(image);
// Add page content to the FixedDocument
PageContent pageContent = new PageContent();
((IAddChild)pageContent).AddChild(fixedPage);
fixedDocument.Pages.Add(pageContent);
printDialog.PrintDocument(fixedDocument.DocumentPaginator, "Styled Print Preview");
}
}
ব্যাখ্যা:
- এখানে TextBlock এবং Image কন্ট্রোলের মাধ্যমে একটি স্টাইলড প্রিন্ট পৃষ্ঠা তৈরি করা হয়েছে।
- FontSize, FontWeight, Margin ইত্যাদি প্রপার্টি ব্যবহার করে কাস্টম স্টাইলিং করা হয়েছে।
- Image যোগ করা হয়েছে যাতে একটি ছবি প্রিন্ট প্রিভিউতে প্রদর্শিত হয়।
সারাংশ (Summary)
- Print Preview তৈরি করার জন্য PrintDialog, FixedDocument, এবং FixedPage কন্ট্রোল ব্যবহার করা হয়।
- FixedDocument ব্যবহার করে একাধিক পৃষ্ঠা তৈরি করা সম্ভব, এবং প্রতিটি পৃষ্ঠায় কাস্টম কন্টেন্ট যেমন টেক্সট, ছবি, টেবিল ইত্যাদি যোগ করা যায়।
- Print Preview কাস্টমাইজ করার মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনের প্রিন্ট আউট আরও আকর্ষণীয় এবং ব্যবহারযোগ্য করে তুলতে পারেন।
- PrintDialog.PrintDocument মেথড ব্যবহার করে প্রিন্ট প্রিভিউ দেখানো হয় এবং প্রিন্টের জন্য প্রস্তুত করা হয়।
WPF তে Print Preview তৈরি করার মাধ্যমে, ব্যবহারকারীরা তাদের ডকুমেন্ট প্রিন্ট করার আগে একটি সঠিক প্রিভিউ দেখতে পায় এবং প্রয়োজনে সংশোধন করতে পারে।
WPF (Windows Presentation Foundation) অ্যাপ্লিকেশনে FixedDocument এবং FlowDocument হল দুটি প্রধান কন্ট্রোল, যা ডকুমেন্ট রিপ্রেজেন্টেশন এবং প্রিন্টিংয়ের জন্য ব্যবহৃত হয়। এই দুটি ডকুমেন্ট স্টাইলের মধ্যে পার্থক্য রয়েছে এবং তারা বিভিন্ন ধরনের ডকুমেন্ট উপস্থাপনে সহায়তা করে। এখানে, আমরা এই দুইটি ডকুমেন্টের বৈশিষ্ট্য, ব্যবহার এবং পার্থক্য আলোচনা করবো।
FlowDocument
FlowDocument একটি ডাইনামিক এবং ফ্লেক্সিবল ডকুমেন্ট যা ডকুমেন্টের কন্টেন্টকে রেসপন্সিভলি প্রদর্শন করে। এটি টেক্সট, ইমেজ, টেবিল, লিস্ট ইত্যাদি অন্তর্ভুক্ত করতে পারে এবং এটি সাইজ পরিবর্তনের সাথে সাথে কন্টেন্টের লেআউট স্বয়ংক্রিয়ভাবে পরিবর্তন করতে পারে।
FlowDocument এর বৈশিষ্ট্য (Features of FlowDocument)
- Dynamic Layout: FlowDocument এর মধ্যে কন্টেন্ট লেআউট স্বয়ংক্রিয়ভাবে সামঞ্জস্যপূর্ণ হয়। এটি স্ক্রলিং এবং সাইজ পরিবর্তন সাপোর্ট করে।
- Text Wrapping: টেক্সট স্বয়ংক্রিয়ভাবে নতুন লাইনে চলে যায় যখন লাইনটি পূর্ণ হয়ে যায়।
- Interactive Elements: FlowDocument এ ইন্টারেকটিভ উপাদান যেমন hyperlinks এবং buttons যুক্ত করা যেতে পারে।
- Flow-Based Layout: এটি সাধারণত UI তে ব্যবহার করা হয় যেখানে কন্টেন্টের উপস্থাপনা বিভিন্ন স্ক্রীন সাইজ বা রেজোলিউশনের উপর ভিত্তি করে পরিবর্তিত হয়।
FlowDocument উদাহরণ (Example of FlowDocument)
<Window x:Class="WPFApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="FlowDocument Example" Height="350" Width="525">
<ScrollViewer>
<FlowDocumentScrollViewer>
<FlowDocument>
<Paragraph>
<Run Text="This is a FlowDocument example." />
</Paragraph>
<Paragraph>
<Run Text="FlowDocuments are flexible and allow for dynamic layout adjustments." />
</Paragraph>
<List>
<ListItem><Paragraph><Run Text="Item 1" /></Paragraph></ListItem>
<ListItem><Paragraph><Run Text="Item 2" /></Paragraph></ListItem>
<ListItem><Paragraph><Run Text="Item 3" /></Paragraph></ListItem>
</List>
</FlowDocument>
</FlowDocumentScrollViewer>
</ScrollViewer>
</Window>
এখানে, FlowDocument ব্যবহৃত হয়েছে যেখানে টেক্সট এবং লিস্ট আছেযা সহজে স্ক্রল হতে পারে। এটি স্ক্রল করার সাথে সাথে স্বয়ংক্রিয়ভাবে কন্টেন্ট ফিট হয়ে যায়।
FixedDocument
FixedDocument একটি ফিক্সড লেআউট ডকুমেন্ট যা কন্টেন্টকে নির্দিষ্ট একটি পৃষ্ঠা লেআউট অনুসারে প্রদর্শন করে। এটি সাধারণত প্রিন্টিং এবং ডকুমেন্ট ভিউ এর জন্য ব্যবহৃত হয়, যেখানে আপনি নির্দিষ্ট পৃষ্ঠার আকার এবং কন্টেন্টের অবস্থান নির্ধারণ করতে পারেন।
FixedDocument এর বৈশিষ্ট্য (Features of FixedDocument)
- Fixed Layout: FixedDocument একটি নির্দিষ্ট আকারে ডকুমেন্ট প্রদর্শন করে, যার মধ্যে পৃষ্ঠা এবং কন্টেন্টের সঠিক অবস্থান থাকে। এটি সাধারণত প্রিন্ট আউটের জন্য ব্যবহৃত হয়।
- Printable Documents: FixedDocument সাধারণত প্রিন্টিং ফিচার সাপোর্ট করে এবং ব্যবহারকারীর প্রিন্টিং প্রয়োজনের জন্য উপযুক্ত।
- Page Control: FixedDocument এ পৃষ্ঠা বিভাজন এবং পৃষ্ঠার জন্য কন্টেন্ট কাস্টমাইজ করার ক্ষমতা রয়েছে।
- No Dynamic Layout: FixedDocument এর মধ্যে কন্টেন্টের লেআউট একেবারে স্থির থাকে, অর্থাৎ এটি স্ক্রীন সাইজের পরিবর্তনের সঙ্গে স্বয়ংক্রিয়ভাবে পরিবর্তিত হয় না।
FixedDocument উদাহরণ (Example of FixedDocument)
<Window x:Class="WPFApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="FixedDocument Example" Height="350" Width="525">
<FixedDocumentViewer>
<FixedDocument>
<PageContent>
<PageMedia3D />
</PageContent>
</FixedDocument>
</FixedDocumentViewer>
</Window>
এখানে, FixedDocument ব্যবহার করে একটি নির্দিষ্ট পৃষ্ঠা তৈরি করা হয়েছে। এটি সাধারণত প্রিন্ট ফরম্যাট বা ফিক্সড আকারে ডকুমেন্ট প্রদর্শন করতে ব্যবহৃত হয়।
FlowDocument এবং FixedDocument এর মধ্যে পার্থক্য (Differences Between FlowDocument and FixedDocument)
| Feature | FlowDocument | FixedDocument |
|---|---|---|
| Layout | Dynamic and flexible, adjusts with screen size or content | Fixed layout, doesn’t change with screen size |
| Content Flow | Content flows dynamically, wrapping based on size | Content is fixed, no wrapping or resizing happens |
| Use Case | For reading, editing, or displaying content that can vary | Typically used for printable documents with fixed format |
| Interactivity | Supports interactive elements like hyperlinks and buttons | Mainly used for static content in print-ready format |
| Example Usage | Articles, documentation, or reports that need flexibility | Printable pages, books, reports with a fixed layout |
| Scrolling | Can scroll and wrap text dynamically | No scrolling or text wrapping; content is static |
সারাংশ (Summary)
- FlowDocument: এটি একটি ফ্লেক্সিবল ডকুমেন্ট যা ডাইনামিক লেআউট এবং রেসপন্সিভ উপস্থাপন সাপোর্ট করে। এটি সাধারণত পড়া বা সম্পাদনা করার জন্য ব্যবহার করা হয় যেখানে কন্টেন্টের আকার পরিবর্তন হতে পারে।
- FixedDocument: এটি একটি ফিক্সড লেআউট ডকুমেন্ট, যা নির্দিষ্ট পৃষ্ঠার আকারে কন্টেন্ট প্রদর্শন করে। এটি সাধারণত প্রিন্ট বা বইয়ের জন্য ব্যবহৃত হয়, যেখানে কন্টেন্টের লেআউট সুনির্দিষ্ট থাকে।
FlowDocument সাধারণত অ্যাপ্লিকেশন UI এর মধ্যে পাঠযোগ্য কন্টেন্ট প্রদর্শনের জন্য ব্যবহৃত হয়, যেখানে FixedDocument ব্যবহার হয় প্রিন্টিং, রিপোর্টিং বা কাগজে আউটপুট প্রদানের জন্য যেখানে লেআউট অপরিবর্তনীয় থাকে।
WPF (Windows Presentation Foundation) এ Printing একটি গুরুত্বপূর্ণ ফিচার যা আপনাকে আপনার অ্যাপ্লিকেশনের কাস্টম কন্ট্রোল এবং কনটেন্ট প্রিন্ট করার সুযোগ দেয়। এটি ব্যবহারকারীদের জন্য কাস্টম আউটপুট তৈরি করতে সহায়ক, যেমন রিপোর্ট, ইনভয়েস, বা অন্য কোন ধরনের প্রিন্ট আউট। WPF প্রিন্টিং সিস্টেম কাস্টম কন্ট্রোল প্রিন্টিং, গ্রাফিক্স, এবং কনটেন্টের ইন্টারঅ্যাক্টিভ প্রিন্টিং সমর্থন করে।
WPF তে প্রিন্টিং সাধারণত PrintDialog এবং PrintQueue ব্যবহার করে করা হয়, এবং কাস্টম কন্ট্রোল বা কনটেন্ট প্রিন্ট করার জন্য Visual এবং PrintVisual মেথড ব্যবহার করা হয়।
WPF তে প্রিন্টিং কিভাবে কাজ করে?
WPF প্রিন্টিং সিস্টেমে PrintDialog, PrintDocument, এবং PrintVisual মেথডের মতো ক্লাস এবং ফাংশনগুলো রয়েছে, যা আপনাকে কাস্টম কন্ট্রোল বা কনটেন্টের প্রিন্ট আউট তৈরি করতে সাহায্য করে। PrintDialog ব্যবহার করে ব্যবহারকারী প্রিন্টার নির্বাচন করতে পারে এবং PrintVisual বা PrintPage মেথড ব্যবহার করে প্রিন্টের জন্য কনটেন্ট প্রস্তুত করা হয়।
কাস্টম কন্ট্রোল প্রিন্টিং (Printing Custom Controls)
Custom Control বা User Control প্রিন্ট করার জন্য আপনাকে কন্ট্রোলের Visual Tree কে প্রিন্ট করতে হবে। WPF এ এটি করা যায় PrintVisual মেথডের মাধ্যমে, যা কন্ট্রোলের গ্রাফিক্যাল কন্টেন্ট সরাসরি প্রিন্টার থেকে প্রিন্ট করে।
Custom Control Print Example:
ধরা যাক, আমাদের একটি কাস্টম বাটন তৈরি আছে এবং আমরা এই বাটনটির প্রিন্ট আউট তৈরি করতে চাই।
- Custom Button তৈরি করা:
<Button x:Name="myButton" Content="Print Me" Width="200" Height="100" />
- Print Button কোডে:
using System.Windows;
using System.Windows.Controls;
using System.Windows.Printing;
namespace WPFApp
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void PrintButton_Click(object sender, RoutedEventArgs e)
{
// Create a PrintDialog
PrintDialog printDialog = new PrintDialog();
// Check if the user selected a printer
if (printDialog.ShowDialog() == true)
{
// Print the Button's Visual
printDialog.PrintVisual(myButton, "Custom Button Print");
}
}
}
}
এখানে, PrintVisual মেথড ব্যবহার করা হচ্ছে, যা myButton কন্ট্রোলের Visual Tree কে প্রিন্ট করবে এবং "Custom Button Print" নামের শিরোনামে প্রিন্ট করবে।
কাস্টম কনটেন্ট প্রিন্টিং (Printing Custom Content)
আপনি যদি কোনো text, graphics অথবা complex content প্রিন্ট করতে চান, তাহলে আপনাকে DrawingVisual বা Visual ব্যবহার করে কনটেন্ট প্রিন্ট করতে হবে।
Content Print Example:
- Text and Graphics Print Example:
using System.Windows;
using System.Windows.Controls;
using System.Windows.Printing;
using System.Windows.Media;
using System.Windows.Shapes;
namespace WPFApp
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void PrintContent_Click(object sender, RoutedEventArgs e)
{
PrintDialog printDialog = new PrintDialog();
if (printDialog.ShowDialog() == true)
{
// Create a DrawingVisual object
DrawingVisual drawingVisual = new DrawingVisual();
// Draw content (text and shapes)
using (DrawingContext drawingContext = drawingVisual.RenderOpen())
{
drawingContext.DrawText(
new FormattedText("Hello, WPF Printing!", System.Globalization.CultureInfo.CurrentCulture,
FlowDirection.LeftToRight, new Typeface("Arial"), 32, Brushes.Black),
new Point(100, 100)
);
// Draw a simple rectangle
drawingContext.DrawRectangle(Brushes.LightBlue, new Pen(Brushes.Black, 2), new Rect(100, 150, 200, 100));
}
// Print the visual content
printDialog.PrintVisual(drawingVisual, "Custom Content Print");
}
}
}
}
এখানে, আমরা একটি DrawingVisual তৈরি করেছি এবং এতে text এবং graphics (rectangle) অঙ্কন করেছি। তারপর PrintDialog ব্যবহার করে কনটেন্টটি প্রিন্ট করা হয়েছে।
Printing Content with PageSettings
যখন আপনি প্রিন্টিং করবেন, তখন PageSettings এবং PrintTicket ব্যবহার করে কাস্টমাইজ করা যাবে, যেমন পেজ সাইজ, মার্জিন, অরিয়েন্টেশন ইত্যাদি।
Example with PageSettings:
using System.Windows;
using System.Windows.Printing;
namespace WPFApp
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void PrintContentWithSettings_Click(object sender, RoutedEventArgs e)
{
PrintDialog printDialog = new PrintDialog();
// Setting page orientation and size
printDialog.PageRangeSelection = PageRangeSelection.AllPages;
printDialog.PrintTicket.PageOrientation = PageOrientation.Landscape;
if (printDialog.ShowDialog() == true)
{
// Create a DrawingVisual to print content
DrawingVisual drawingVisual = new DrawingVisual();
using (DrawingContext drawingContext = drawingVisual.RenderOpen())
{
drawingContext.DrawText(
new FormattedText("Printed in Landscape!", System.Globalization.CultureInfo.CurrentCulture,
FlowDirection.LeftToRight, new Typeface("Arial"), 32, Brushes.Black),
new Point(100, 100)
);
}
// Print the visual content with the PageSettings
printDialog.PrintVisual(drawingVisual, "Landscape Print Example");
}
}
}
}
এখানে, PageOrientation.Landscape সেট করা হয়েছে, যাতে প্রিন্ট আউটটি ল্যান্ডস্কেপ মুডে প্রিন্ট হয়।
সারাংশ (Summary)
- Printing Custom Controls: WPF এ PrintVisual ব্যবহার করে কাস্টম কন্ট্রোল (যেমন বাটন, টেক্সটবক্স) এবং তাদের Visual Tree প্রিন্ট করা যায়। এতে UI কন্ট্রোলের গ্রাফিক্যাল রেন্ডারিং কন্টেন্ট সরাসরি প্রিন্ট করা হয়।
- Printing Custom Content: DrawingVisual ব্যবহার করে কাস্টম কনটেন্ট (যেমন টেক্সট, গ্রাফিক্স, আকার ইত্যাদি) প্রিন্ট করা সম্ভব।
- PrintDialog: প্রিন্টার নির্বাচন এবং প্রিন্টিং অপশন কাস্টমাইজ করার জন্য PrintDialog ব্যবহৃত হয়।
- PageSettings: প্রিন্টিংয়ের সময় পেজ সাইজ, মার্জিন, অরিয়েন্টেশন ইত্যাদি সেট করার জন্য PageSettings ব্যবহার করা যায়।
WPF প্রিন্টিং সিস্টেম কাস্টম কন্ট্রোল এবং কনটেন্টের জন্য শক্তিশালী সমাধান প্রদান করে, যা বিভিন্ন ধরনের প্রিন্ট আউট তৈরি করার ক্ষেত্রে উপকারী।
Read more